/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.blue.graphics;

import java.nio.*;

/**
 *
 * @author kelvio
 */
public interface GraphicsLibrary {

    /**
     *
     * @param drawPrimitive
     * @return
     */
    GraphicsLibrary begin(DrawPrimitive drawPrimitive);

    /**
     *
     */
    GraphicsLibrary end();


    /**
     *
     * @param x
     * @param y
     * @return
     */
    GraphicsLibrary setVertex2f(float x, float y);

    /**
     *
     * @param vertex
     * @param index
     * @return
     */
    GraphicsLibrary setVertex2fv(float[] vertex, int index);

    /**
     *
     * @param vertex
     * @return
     */
    GraphicsLibrary setVertex2fv(FloatBuffer vertex);

    /**
     *
     * @param x
     * @param y
     * @return
     */
    GraphicsLibrary setVertex2d(double x, double y);


    /**
     *
     * @param vertex
     * @param index
     * @return
     */
    GraphicsLibrary setVertex2dv(double[] vertex, int index);

    /**
     *
     * @param vertex
     * @return
     */
    GraphicsLibrary setVertex2dv(DoubleBuffer vertex);

    /**
     *
     * @param x
     * @param y
     * @return
     */
    GraphicsLibrary setVertex2i(int x, int y);

    /**
     *
     * @param vertex
     * @param index
     * @return
     */
    GraphicsLibrary setVertex2iv(int[] vertex, int index);

    /**
     *
     * @param vertex
     * @return
     */
    GraphicsLibrary setVertex2iv(IntBuffer vertex);


    /**
     *
     * @param x
     * @param y
     * @param z
     * @return
     */
    GraphicsLibrary setVertex3f(float x, float y, float z);


    /**
     *
     * @param vertex
     * @param index
     * @return
     */
    GraphicsLibrary setVertex3fv(float[] vertex, int index);

    GraphicsLibrary setVertex3fv(FloatBuffer vertex);

    GraphicsLibrary setVertex3d(double x, double y, double z);


    GraphicsLibrary setVertex3dv(double[] vertex, int index);

    GraphicsLibrary setVertex3dv(DoubleBuffer vertex);

    GraphicsLibrary setVertex3i(int x, int y, int z);

    GraphicsLibrary setVertex3iv(int[] vertex, int index);

    GraphicsLibrary setVertex3iv(IntBuffer vertex);


    GraphicsLibrary setVertex3s(short x, short y, short z);

    GraphicsLibrary setVertex3sv(short[] vertex, int index);

    GraphicsLibrary setVertex3sv(ShortBuffer vertex);

    GraphicsLibrary setVertex4f(float x, float y, float z, float w);


    GraphicsLibrary setVertex4fv(float[] vertex, int index);

    GraphicsLibrary setVertex4fv(FloatBuffer vertex);

    GraphicsLibrary setVertex4d(double x, double y, double z, double w);


    GraphicsLibrary setVertex4dv(double[] vertex, int index);

    GraphicsLibrary setVertex4dv(DoubleBuffer vertex);

    GraphicsLibrary setVertex4i(int x, int y, int z, int w);

    GraphicsLibrary setVertex4iv(int[] vertex, int index);

    GraphicsLibrary setVertex4iv(IntBuffer vertex);


    GraphicsLibrary setColor3f(float r, float g, float b);

    GraphicsLibrary setColor3fv(float[] color, int index);

    GraphicsLibrary setColor3f(FloatBuffer color);


    GraphicsLibrary setColor4f(float r, float g, float b, float alpha);

    GraphicsLibrary setColor4fv(float[] color, int index);

    GraphicsLibrary setColor4f(FloatBuffer color);


    void setClearColor(float r, float g, float b, float alpha);
    
    
     /**
     * 
     * @return 
     */
    GraphicsLibrary pushMatrix();

    /**
     * 
     * @return 
     */
    GraphicsLibrary popMatrix();
    
    /**
     * 
     */
    void clearColorBuffer();
    
     /**
     * 
     */
    GraphicsLibrary rotatef(float theta, float x, float y, float z);
}
